package sortieren;

public class KlangDemonstrator implements Demonstrator{
  public static final int[] HAENSCHENKLEIN=new int[]{67,64,64,65,62,62,60,62,64,65,67,67,67};
  private static final int NORM_INSTR=1;
  private static final int GET_INSTR =22;
  private static final int SWAP_INSTR=22;
  private final Tonfolge tonfolge=new Tonfolge();

  @Override
  public void initAction(GetSwapSorter alg){ tonfolge.clear(); }
  
  @Override
  public void getAction(GetSwapSorter alg, int i){
    tonfolge.instrument(GET_INSTR);
    tonfolge.hintenNote(alg.get(i), 1);
  }

  @Override
  public void swapAction(GetSwapSorter alg, int i, int j){
    tonfolge.instrument(SWAP_INSTR);
    tonfolge.hintenNote(alg.get(i), 1);
    tonfolge.neueNote(alg.get(j), tonfolge.lastTick()-1, 1);
  }

  @Override
  public void markAction(GetSwapSorter alg, int i, int wie){
    //die Positionen sind nicht sinnvoll als Tonhöhe darstellbar
    //Man könnte zwar Streichinstrumente für Dauerton verwenden
    //aber in welcher Tonhöhe?
  }

  @Override
  public void readyAction(GetSwapSorter alg){
    //vor der Gesamtwiedergabe erst mal eine Pause.
    tonfolge.instrument(NORM_INSTR);
    tonfolge.hintenPause(2);
    if(alg.length()>0){
      tonfolge.hintenNote(alg.uncountedGet(0), 1);
      for(int i=1; i<alg.length(); i++)
        tonfolge.hintenNote(alg.uncountedGet(i), 1);
      tonfolge.start(50);
    }
  }

  /**Wartet, bis alle Töne abgespielt sind.*/
  public void join(){ tonfolge.join(); }
}
